import Schema from 'validate'

const roomInfo = new Schema({
  // 楼栋
  building: {
    type: String, // 类型
    required: true, // 非空
    message: '楼栋不能为空', // 提示信息
  },
  // 房号
  room: {
    type: String, // 类型
    required: true, // 非空
    message: '房号不能为空', // 提示信息
  },
  // 姓名
  name: {
    type: String, // 类型
    match: /^[\u4e00-\u9fa5]{2,6}$/, // 中文正则
    message: '姓名中文 2-6位', // 提示信息
  },
  // 手机号码
  mobile: {
    type: String, // 类型
    match: /^1[3-9]\d{9}$/, // 手机号码
    message: '手机不合法', // 提示信息
  },
  // 身份证背面
  idcardBackUrl: {
    type: String, // 类型
    required: true, // 非空
    message: '身份证背面不能为空', // 提示信息
  },
  // 身份证正面
  idcardFrontUrl: {
    type: String, // 类型
    required: true, // 非空
    message: '身份证正面不能为空', // 提示信息
  },
}, { strip: false } // 解决 验证对象后，数据丢失属性的问题！！
)

Page({
  data: {
    // 接口文档中查看
    /** * 小区楼栋信息 */
    building: '',
    /** * 业主性别0女1男 */
    gender: 1,
    /** * 身份证背面 */
    idcardBackUrl: '',
    /** * 身份证正面 */
    idcardFrontUrl: '',
    /** * 业主电话 */
    mobile: '',
    /** * 业主姓名 */
    name: '',
    /** * 小区信息 */
    point: '',
    /** * 小区房间信息 */
    room: '',
  },
  // 把从参数传递过来的数据，解构出来
  async onLoad({ point, building, room, id }) {
    if (id) {
      // 编辑
      console.log('编辑页面');
      // 修改为'编辑页面'
      wx.setNavigationBarTitle({ title: '编辑房屋信息' })
      // 根据id  来获取房屋信息  设置data
      const res = await wx.http({
        url: '/room/' + id,
      })
      const { status, ...data } = res.data
      // 因为使用对象展开，data也是一个对象，所以不需要写{}
      this.setData(data)
      // wx.
    } else {
      // 新增
      console.log('新增页面');
      // 修改为'新增页面'
      wx.setNavigationBarTitle({ title: '新增房屋信息' })
      // 设置回data
      this.setData({
        point,
        building,
        room
      })
    }
  },
  async onChooseMedia(ev) {
    // console.log(30, ev);
    // 第一种方法
    // 通过在标签里面设置自定义属性data-type 给正反两面按钮添加不同的属性值，用于区分他们彼此
    // 在事件对象ev.currentTarget.dataset.type来获取

    // 第二种方法
    // 还可以通过小程序里面独有的方法，  wxml的标签中设置mark:type=“属性值”，这里type可以随便写
    // 然后再事件对象ev.mark.type里面获取到数据
    // console.log(ev);
    const res = await wx.chooseMedia({
      // 最多选择文件数量
      count: 1,
      // 接收的类型  图片、视频、两者都可mix
      mediaType: ['image'],
    })
    // console.log(36, res);
    // 获取临时文件的路径
    const { tempFilePath } = res.tempFiles[0]
    console.log(tempFilePath);
    // 把临时文件上传到服务器   上传文件有单独的api 
    wx.uploadFile({
      url: wx.http.baseURL + '/upload',
      // 文件临时路径
      filePath: tempFilePath,
      // 获取文件的key  给后端去获取
      name: 'file',
      header: {
        Authorization: `Bearer ${getApp().token}`,
      },
      success: (res) => {
        // console.log(res);
        // 把响应回来的数据里面的是字符串，需要通过JSON转换
        const data = JSON.parse(res.data)
        // 把mark：type获取到，用户点击的是正面还是反面
        const type = ev.mark.type
        // 转换回来的data数据，设置到页面
        this.setData({
          // 对象设置属性的 灵活写法  中括号里面的单词表示变量
          // 这里面如果直接写type，表示在data里面内部的属性type
          // 如果是[type]就是表示外部一个变量type
          [type]: data.data.url
        })
        // console.log(data);
      },
      fail: (err) => {
        console.log(err);
      }
    })
  },
  // 提交审核按钮
  async onSubmit() {
    // 需要做验证校验

    /* 
    1 获取到所有的表单数据 
    2 表单的合法性验证 （validate.js 库）
      1 小区、楼栋、房间号、身份证正房间  非空即可 
      2 姓名 中文-[2-6]  手机号码-
    3 验证通过 调用接口 完成 新增房屋的功能！！ 
     */
    const { id, building, gender, idcardBackUrl, idcardFrontUrl, mobile, name, point, room } = this.data

    const params = { id, building, gender, idcardBackUrl, idcardFrontUrl, mobile, name, point, room }

    // 开始校验
    const errors = roomInfo.validate(params)  //默认情况，validate会自动帮你移除 要验证的对象中属性（如果这个属性没有在你的验证规则中出现），
    // console.log(errors);

    if (errors.length) {
      wx.utils.toast(errors[0].message)
      return
    }

    // 对params.id做一个判断，如果你等于undefined 就删除id属性
    if (params.id === undefined) {
      // 删除params里面的id
      delete params.id
    }

    // 构造数据，调用接口发送给后端
    const res = await wx.http({
      url: '/room',
      method: 'post',
      data: params,
    })

    console.log(152, res);

    if (res.code !== 10000) {
      wx.utils.toast(res.message)
      return
    }

    // 提示用户
    wx.showToast({ title: '新增成功' })  //默认图标  成功

    setTimeout(() => {
      wx.navigateTo({
        url: '/house_pkg/pages/list/index'
      })
    }, 1500)
  },
  // 删除照片
  removePicture(ev) {
    const { type } = ev.mark
    // console.log(type);
    this.setData({
      // 变量 type = idcardBackUrl 或者 idcardFrontUrl
      [type]: ''
    })
  }
})
